package com.cx330;

import org.junit.Test;

import java.util.Arrays;

public class Example30 {
    public void change(int a, int[] arr) {
        a++;
        arr[0]++;
        arr[1] = 100;
    }

    /*
    形参是基本数据类型，实参给形参的是数据值的副本；
    形参是引用数据类型，实参给形参的是地址值的副本；
     */
    @Test
    public void test1() {
        int x = 1;
        int[] nums = {1, 1};
        change(x, nums);
        System.out.println("change后：x = " + x);
        System.out.println("change后nums[0] = " + nums[0] + "，nums[1] = " + nums[1]);
    }

    public void change(String s1, StringBuffer s2) {
        s1.concat("Cx330");
        s2.append("Cx330");
    }

    /*
    String对象是常量对象，内部的value数组是不可变的；
    StringBuffer对象是可变对象，内部的value数组是一个缓冲区，默认初始容量是16；
     */
    @Test
    public void test2() {
        String x = "hello";
        StringBuffer y = new StringBuffer("hello");
        change(x, y);
        System.out.println("change后：x = " + x);
        System.out.println("change后：y = " + y);
    }

    public void change(int[] arr) {
        arr = new int[arr.length * 2];
    }

    /*
    实参给形参的是地址值的副本，一旦形参指向新对象，就与原来的实参对象完全无关了。
     */
    @Test
    public void test3() {
        int[] nums = {1, 1};
        change(nums);
        System.out.println("change后：" + Arrays.toString(nums));
    }
}
